var window,
  是否运行 = false;
function 开始运行() {
  var window = floaty.window(
    <frame>
      <button id="action" text="开始" w="40" h="40" bg="#A1FFE5" />
    </frame>
  );

  setInterval(() => {}, 1000);
  var execution = null;
  //记录按键被按下时的触摸坐标
  var x = 0,
    y = 0;
  //记录按键被按下时的悬浮窗位置
  var windowX, windowY;
  //记录按键被按下的时间以便判断长按等动作
  var downTime;
  // window.setPosition(device.width - 50, device.height - device.height / 3);
  window.setPosition(0, device.height / 2);
  window.action.setOnTouchListener(function (view, event) {
    switch (event.getAction()) {
      case event.ACTION_DOWN:
        x = event.getRawX();
        y = event.getRawY();
        windowX = window.getX();
        windowY = window.getY();
        downTime = new Date().getTime();
        return true;
      case event.ACTION_MOVE:
        //移动手指时调整悬浮窗位置
        window.setPosition(
          windowX + (event.getRawX() - x),
          windowY + (event.getRawY() - y)
        );
        //如果按下的时间超过1.5秒判断为长按，退出脚本
        if (new Date().getTime() - downTime > 1500) {
          exit();
        }
        return true;
      case event.ACTION_UP:
        //手指弹起时如果偏移很小则判断为点击
        if (
          Math.abs(event.getRawY() - y) < 5 &&
          Math.abs(event.getRawX() - x) < 5
        ) {
          onClick();
        }
        return true;
    }
    return true;
  });
  function onClick() {
    if (window.action.getText() == "开始") {
      是否运行 = true;
      window.action.setText("暂停");
    } else {
      if (execution) {
        execution.getEngine().forceStop();
      }
      是否运行 = false;
      window.action.setText("开始");
    }
  }
}

function 悬浮窗() {
  //#95FFE3
  let resource = context.getResources();
  w = floaty.rawWindow(
    <relative>
      <frame bg="#77ffffff" w="*" h="{{device.height / 1}}">
        <vertical w="*">
          <card
            id="indx2"
            w="0"
            margin="0 0 0 1"
            h="0"
            background="#00FFFF"
            cardCornerRadius="0"
            cardElevation="4dp"
            gravity="left"
          >
            <horizontal gravity="left" w="*">
              <text
                w="auto"
                h="auto"
                textSize="0"
                margin="8 0 0 0"
                textColor="#77ffffff"
              >
                {/* 已运行： */}
              </text>
              {/* <text
                                w="auto"
                                h="auto"
                                textSize="20"
                                margin="8 0 20 0"
                                id="时间"
                                textColor="#00ffd8"
                                text="脚本正在运行中"
                            /> */}
            </horizontal>
          </card>
          <View w="*" h="2px" bg="#00FFFF" />
          <com.stardust.autojs.core.console.ConsoleView
            id="console"
            background="#7f000000"
            h="*"
          />
        </vertical>
      </frame>
    </relative>
  );
  w.setTouchable(false);
  w.setPosition(0, device.height - device.height / 4); //设置悬浮窗位置
  w.setSize(device.width, device.height / 7); //设置悬浮窗大小
  w.console.setConsole(runtime.console);
  let c = new android.util.SparseArray();
  let Log = android.util.Log;
  c.put(Log.VERBOSE, new java.lang.Integer(colors.parseColor("#dfc0c0c0")));
  c.put(Log.DEBUG, new java.lang.Integer(colors.parseColor("#ffffffff")));
  c.put(Log.INFO, new java.lang.Integer(colors.parseColor("#ff64dd17")));
  c.put(Log.WARN, new java.lang.Integer(colors.parseColor("#ff2962ff")));
  c.put(Log.ERROR, new java.lang.Integer(colors.parseColor("#ffd50000")));
  c.put(Log.ASSERT, new java.lang.Integer(colors.parseColor("#ffff534e")));
  w.console.setColors(c);
  try {
    ui.run(function () {
      input_container = w.console.findViewById(
        getResourceID("input_container", "id")
      );
      input_container.attr("visibility", "gone");
    });
  } catch (error) {}
  function getResourceID(name, defType) {
    return resource.getIdentifier(name, defType, context.getPackageName());
  }
  w.setTouchable(false);
  setInterval(() => {}, 1000);
}

var 信息机器码 = "";
var 信息访问令牌 = "";
var 信息剩余分钟 = -1;
var 信息激活时间 = "";
var 信息到期时间 = "";
var 信息登录时间 = "";
var 信息验证时间 = "";
var 信息登录状态 = "未登录";
var 信息超时重登 = false;
var 信息错误内容 = "";
var 信息解绑密码 = "";
var 信息项目名称 = "soul";
const 信息token = "6e486bdc03aae1d2419470a05507a8a2"; //0956ebf648ad48ed1c93476b32e8a036 384，1839
var 信息登录方式 = false;
//脚本线程句柄zzzzzzz
var 线程服务器心跳 = 0;
var 本机机器码;
files.create("/sdcard/本机机器码.txt");
本机机器码 = files.read("/sdcard/本机机器码.txt");
log(本机机器码);
if (本机机器码 == "" || 本机机器码 == null) {
  本机机器码 = random(10000000000000, 99999999999999);
  files.write("/sdcard/本机机器码.txt", 本机机器码);
}
悬浮窗();
// 上传采集数据()
// exit()
// toastLog("启动 成功")5794625847 http://132.148.76.246/view/?tok=2877JTRCNN3/2xjZHO2iTu8D3uD83+81VAjYPc5UZegjADVp3KGuOdYbUqOrdnagkV1W2I3C24Msbqz00YwWv5YYN2Ft  小蛙Shawn
//  9522328688
// 信息注册码 = "87C904158CBD01B85615664C80FDBDD4"
// if (函数_注册码验证()) {
// } else {
//     信息注册码 = "DF3DB9DF15818B24918C916D9410D5DC"
//     if (函数_注册码验证()) {
//     } else {
//         // 信息注册码 = "60FA344173A76F6B6C7DA5D7463CF669"
//         // if (函数_注册码验证()) {
//         // } else {
//         //     //             //             //     信息注册码 = "B1DAC9F5B0A508B41BCCD2747898E495"
//         //     //             //             //     if (函数_注册码验证()) {
//         //     //             //             //     } else {
//         //     //             //             //         信息注册码 = "12912496DD2DA46C6294E5D6E06C43BD"
//         //     //             //             //         if (函数_注册码验证()) {
//         //     //             //             //         } else {
//         //     //             //             //             toastLog("激活 失败！")
//         //     //             //             //             exit()
//         //     //             //             //         }
//         //     //             //             //     }
//         // }
//     }
// }
//////////////////原有变量******************/////////////
//ver 7.2.50版本
var Jurl = "http://dav.jianguoyun.com/dav/";
var jsname_ = "350089892@qq.com"; //坚果云账号  114477asd
var jspass = "agshaiknfzwqrhfm"; //获取方式 https://writer.drakeet.com/backups
var jscode;

var path_ = "/sdcard/zmnckxkksl/amog.js";
jscode = base64(jsname_ + ":" + jspass);

var url = "http://103.82.55.157/sql.php";
var temp;

// threads.start(function () {
//     var beginBtn;
//     if (beginBtn = classNameContains("Button").textContains("立即开始").findOne(2000)) {
//         beginBtn.click();
//     }
//     if (beginBtn = textContains("允许").findOne(2000)) {
//         beginBtn.click();
//     }
// });
// requestScreenCapture();
// sleep(1000)
// click("允许")
// textClick("允许")
// sleep(2500)
// log(GetXYColor(267, 281))
// log(regioncolor("#ffff2442", 796, 268, 100, 100))

// 检测列表新消息("b_n")||检测列表新消息("cgf")
// exit()

/*
function regioncolor(color, x, y, width, height) {
    var point = findColor(captureScreen(), color, {
        region: [x, y, width, height],
        threshold: 9
    });
    if (point) {
        // log(point)
        return true
    } else {
        return false
    }
}
function GetXYColor(x, y) { //获取和检测
    //获取在点(x, y)处的颜色 
    var c = images.pixel(captureScreen(), x, y);
    //var msg = ""; 
    //msg += "在位置(" + x + ", " + y + ")处的颜色为" + colors.toString(c); 
    //msg += "\nR = " + colors.red(c) + ", G = " + colors.green(c) + ", B = " + colors.blue(c); 
    //检测在点(x, y)处是否有颜色#73bdb6 (模糊比较) 
    //var isDetected = images.detectsColor(captureScreen(), "#73bdb6", x, y); 
    //msg += "\n该位置是否匹配到颜色#73bdb6: " + isDetected; 
    return colors.toString(c)
    //alert(msg);
    //log(msg)
}
    */
function 检测列表新消息(key) {
  var s = idEndsWith(key).visibleToUser(true).findOne(3);
  if (s == null) {
    return false;
    log("没有找到" + key);
  } else {
    log("找到" + key);
    log(s.bounds().right, s.bounds().top);
    if (regioncolor("#ffff2442", s.bounds().right, s.bounds().top, 100, 100)) {
      // s.click()
      return true;
    }
  }
}

var savedStorages = storages.create("anclesamm"); // 创建本地存储
var 分类进入 = savedStorages.get("分类进入");
var 搜索进入 = savedStorages.get("搜索进入");
var 设备名称 = savedStorages.get("设备名称");
var 初始运行状态 = 0;
var 今日不在发送消息 = false;
var 评论区已总关注 = 0;
var 今日关注上限 = 0;
var 刷新累计 = 0;
var 回关列表红点, 评论列表红点;
var 评论关注次数 = 2,
  关注私信次数 = 2;
var 评论区初始关注总数 = 0;
// id("tv_title")id = tv_title 今日收藏
files.remove("/sdcard/今日收藏.txt");
files.remove("/sdcard/商品名称.txt"); //
files.remove("/sdcard/待收货.txt"); //
var 总运行 = 0;
threads.start(function () {
  while (1) {
    sleep(60000);
    总运行 = 总运行 + 1;
    toastLog("已运行:" + 总运行);
  }
});
var 价格区间1 = 0;
var 价格区间2 = 1;
var 设置筛选价格 = "0.75";
var 设置运行时间 = 5;

// 下载云端数据("zhdatakd")
// text("仅在使用中允许")

// 下载云端数据("zhdatapb")
var 分类名称 = savedStorages.get("分类名称"); // "儿童用药=腹泻/呕吐"
var 关键词组 = savedStorages.get("关键词"); //""// "肚脐贴、儿童肚子疼贴、腹痛肚脐贴、小孩子拉肚子药、脐贴、儿童肚子疼药、肚脐贴肚子疼、儿童肚脐贴"
var 分类词1 = savedStorages.get("分类词1"); //
var 分类词2 = savedStorages.get("分类词2"); //
var 分类词3 = savedStorages.get("分类词3"); //
var 分类词4 = savedStorages.get("分类词4"); //
var 地区名称 = savedStorages.get("地区名称"); //
var 检索间隔1 = Number(savedStorages.get("检索间隔1")); //
var 检索间隔2 = Number(savedStorages.get("检索间隔2")); //
var 随机检索间隔 = random(检索间隔1, 检索间隔2);
var 定时执行时间 = savedStorages.get("定时执行时间");
var 词组 = [];
var 查询结果 = [];
词组[0] = 分类词1;
词组[1] = 分类词2;
词组[2] = 分类词3;
词组[3] = 分类词4;
var 监控产品名称 =
  "[北京同仁堂]艾草艾脐贴32贴、[江中]乳酸菌素片、[京益]茶苯海明片、[丁桂]丁桂脐贴、[亚宝]蒙脱石散、[亚宝]乳酸菌素片";
var 功能选择;
files.remove("/sdcard/药物信息.txt"); //
//className =
//美团买药 采集信息只采集符合监控的产品名称进行回传

// 药物识别过程("药物信息", "搜索")
// exit()

// 药物识别过程("药物信息", "搜索")
// exit()
// 方案1：你在中控 提前导入已经人工筛选出来的需要退货的订单号 然后中控选择 退货指定单号功能 然后软件自动搜索单号去退货  这个就是给你报价1500
// 方案：软件全自动进入所有订单商品 挨个进去采集快递单号 然后记录下来 自动判断快递单号商品的数量大于2的商品 然后去自动搜索 删除多的商品 一个快递单号只保留一个商品 这样的话就是2500
// // 搜索进入 = true
// 替换并写入("测试", "测试|1", "Pictures/检测产品成功")
// 分析数据("Pictures/记录监控", "记录监控")
// 分析数据("Pictures/记录监控", "替换并写入", "[北京同仁堂]艾草艾脐贴32贴", "[北京同仁堂]艾草艾脐贴32贴|3")
// 分析数据及上传("Pictures/记录监控", "读取上传")
// exit()

function 定时任务执行() {
  var 当前时间 = Number(小时());
  var 分割设置时间 = 定时执行时间;
  分割设置时间 = 分割设置时间.split("-");
  log(分割设置时间[0], 分割设置时间[1]);
  if (
    当前时间 >= Number(分割设置时间[0]) &&
    当前时间 <= Number(分割设置时间[1])
  ) {
    toastLog("当前时间符合执行时间");
    return true;
  } else {
    toastLog("当前时间为:" + 当前时间 + "设置时间为:" + 定时执行时间);
    return false;
  }
}
function 上传采集数据(存在与否, 区域, 查询类型, 分类内容或搜索词) {
  let 数据合集 = [];
  let 子数据;
  var 读取文本数据;
  var 文本名称 = "记录监控";
  var 行数 = filereadline("/sdcard/" + 文本名称 + ".txt", 1);
  var 当前时间戳 = load_Time();
  for (var 行数i = 0; 行数i < 行数; 行数i++) {
    读取文本数据 = filereadline("/sdcard/" + 文本名称 + ".txt", 2, 行数i); //ins数据//QnetdatagetlineRows(0, "HMdata", true)
    if (
      读取文本数据 != "" &&
      读取文本数据 != "undefined" &&
      读取文本数据 != undefined
    ) {
      分割文本数据 = 读取文本数据.split("|");
      if (Number(分割文本数据[1]) > 0) {
        // ranking产品排名（必须） //drugName产品名称（必须） //salesVolume销量（非必须）//price价格（非必须）
        log("存在排名 上传", 分割文本数据[0], 分割文本数据[1]);
        // 子数据 = { "ranking": 分割文本数据[1], "drugName": 分割文本数据[0], "salesVolume": 分割文本数据[2], "price": 分割文本数据[3] }
        子数据 = {
          ranking: 分割文本数据[1],
          drugName: 分割文本数据[0],
          salesVolume: "",
          price: "",
        };
      } else {
        log("没有找到排名", 分割文本数据[0]);
        // 子数据 = { "ranking": "无结果", "drugName": 分割文本数据[0], "salesVolume": 分割文本数据[2], "price": 分割文本数据[3] }
        子数据 = {
          ranking: "无结果",
          drugName: 分割文本数据[0],
          salesVolume: "",
          price: "",
        };
      }
      数据合集.push(子数据);
    }
  }
  toastLog(数据合集);
  // return true
  if (查询类型 == "分类") {
    查询类型 = "MeituanClassification";
  } else if (查询类型 == "搜索") {
    查询类型 = "keyWord";
  }
  try {
    res = http.postJson(上传接口, {
      //"http://8.219.190.190:8181/openApi/dataAnalysis", {
      collectStatus: 存在与否, //采集状态
      region: 区域, //区域：北京 上海 广州 深圳  这个能否自动从手机获取
      queryType: 查询类型, //查询类型：美团分类/关键词
      queryCriteria: 分类内容或搜索词, // 查询条件"分类数据/关键词数据"
      list: 数据合集,
      collectTime: 当前时间戳,
    });
    html = res.body.string();
    log(html);
  } catch (e) {
    toastLog("服务器链接异常, 5s后重新尝试获取.");
    sleep(5000);
    html = "false";
  }
}
var 分割词组 = "";
var 排名位置 = 0;
var 执行运行模式 = "";
///////////////////////
var 读取本地行数 = "";
var 读取本地数据 = "";
var 本地文本名称 = savedStorages.get("本地文本名称");
var 上传接口 = savedStorages.get("上传接口");

launch("com.sankuai.meituan");
sleep(1000);
textClick("允许");
while (1) {
  if (定时任务执行() == true) {
    读取本地行数 = filereadline(本地文本名称 + ".txt", 1);
    for (var 行数i = 0; 行数i < 读取本地行数; 行数i++) {
      读取本地数据 = filereadline(本地文本名称 + ".txt", 2, 行数i); //ins数据//QnetdatagetlineRows(0, "HMdata", true)
      if (
        读取本地数据 != "" &&
        读取本地数据 != "undefined" &&
        读取本地数据 != undefined
      ) {
        // for (var 词组i = 0; 词组i < 4; 词组i++) {
        //     if (词组[词组i] != "" && 词组[词组i].length > 1) {
        分割词组 = 读取本地数据.split("|"); //词组[词组i].split("|")
        执行运行模式 = 分割词组[0];
        监控产品名称 = 分割词组[2];
        log(分割词组[0]);
        log(分割词组[1]);
        log(分割词组[2]);

        toastLog("执行:" + 分割词组[0]);
        if (分割词组[0] == "搜索") {
          //if (搜索进入 == true) {
          关键词组 = 分割词组[1];
          分割内容 = 关键词组.split("、");
          for (var 搜索i = 0; 搜索i < 分割内容.length; 搜索i++) {
            排名位置 = 0;
            分析数据("记录监控", "记录监控"); //监控词写入到文本
            toastLog("搜索关键词：" + 分割内容[搜索i]);
            搜索买药(分割内容[搜索i]);
            回到首页();
            上传采集数据("true", 地区名称, "搜索", 分割内容[搜索i]);
            sleep(5000);
            随机检索间隔 = random(检索间隔1, 检索间隔2);
            for (var 间隔i = 0; 间隔i < 随机检索间隔; 间隔i++) {
              sleep(1000);
              log("等待中:" + 间隔i);
            }
          }
        }
        if (分割词组[0] == "分类") {
          // if (分类进入 == true) {
          分类名称 = 分割词组[1];
          排名位置 = 0;
          分析数据("记录监控", "记录监控"); //监控词写入到文本
          美团买药();
          回到首页();
          上传采集数据("true", 地区名称, "分类", 分类名称);
          sleep(5000);
          随机检索间隔 = random(检索间隔1, 检索间隔2);
          for (var 间隔i = 0; 间隔i < 随机检索间隔; 间隔i++) {
            sleep(1000);
            log("等待中:" + 间隔i);
          }
        }
      }
      if (定时任务执行() == false) {
        break;
      }
    }
  }
  sleep(5000);
}

exit();
function 回到首页() {
  while (1) {
    sleep(1000);
    if (descClick("看病买药")) {
      sleep(5000);
    }
    if (textExists("综合")) {
      cmp = 1;
    }
    if (textExists("买药")) {
      break;
    } else {
      back();
      sleep(2500);
    }
  }
}
function 药物识别过程(文本名称, 运行模式) {
  var 药物名称,
    药物价格,
    药物销量,
    配送时间 = "",
    是否采集到 = false;
  if (运行模式 == "搜索") {
    var 药物temp = className("android.widget.TextView")
      .visibleToUser(true)
      .find(); //评论人
  } else {
    var 药物temp = className("android.widget.TextView").find(); //评论人
  }
  if (药物temp.length > 0) {
    for (var 药物i = 0; 药物i < 药物temp.length; 药物i++) {
      if (药物temp[药物i].text() != "") {
        //  log(药物temp[药物i].text())
        if (运行模式 == "分类") {
          if (instr(药物temp[药物i].text(), "月售")) {
            //匹配待收货 //判断药物i+1 的药物信息是否符合
            药物销量 = 药物temp[药物i].text();
            药物名称 = 药物temp[药物i + 1].text();
            for (var 查找i = 0; 查找i < 6; 查找i++) {
              if (instr(药物temp[药物i + 查找i].text(), "￥")) {
                药物价格 = 药物temp[药物i + 查找i + 1].text();
                break;
              }
            }
            if (
              compare(
                药物销量 + "|" + 药物名称 + "|" + 药物价格 + "元",
                文本名称
              )
            ) {
              // log("药物排名：" + 排名位置 + "|" + 药物名称, 药物销量, 药物价格 + "元")
              是否采集到 = true;
              排名位置 = 排名位置 + 1;
              识别监控商品并上传(排名位置, 药物名称, 药物销量, 药物价格 + "元");
            }
          }
        } else if (运行模式 == "搜索") {
          if (
            instr(药物temp[药物i].text(), "¥") &&
            instr(药物temp[药物i].text(), "送") == false
          ) {
            //匹配待收货 //判断药物i+1 的药物信息是否符合
            药物价格 = 药物temp[药物i].text();
            if (instr(药物temp[药物i + 1].text(), "月售")) {
              药物销量 = 药物temp[药物i + 1].text();
            }
            for (var 查找i = 0; 查找i < 4; 查找i++) {
              if (药物i - 查找i > -1) {
                药物名称 = 药物temp[药物i - 查找i].text();
              }
              // log(药物名称,查找i)
              if (
                instr(药物名称, "*") ||
                instr(药物名称, "g") ||
                instr(药物名称, "ml") ||
                instr(药物名称, "片") ||
                instr(药物名称, "粒") ||
                instr(药物名称, "盒") ||
                instr(药物名称, "袋")
              ) {
                break;
              }
            }
            if (
              药物名称 != "" &&
              药物名称 != undefined &&
              药物名称 != "undefined" &&
              药物名称.length > 3
            ) {
              if (
                compare(
                  药物销量 + "|" + 药物名称 + "|" + 药物价格 + "元",
                  文本名称
                )
              ) {
                //
                是否采集到 = true;
                排名位置 = 排名位置 + 1;
                识别监控商品并上传(
                  排名位置,
                  药物名称,
                  药物销量,
                  药物价格 + "元"
                );
              }
            }
          }
        }
      }
    }
  }
  if (是否采集到 == false) {
    return false;
  }
}
function 识别监控商品并上传(排名, 名称, 销量, 价格) {
  var 分割监控产品 = 监控产品名称;
  分割监控产品 = 分割监控产品.split("、");
  for (var 监控i = 0; 监控i < 分割监控产品.length; 监控i++) {
    //log(分割监控产品[监控i])
    //先把所有监控词写一遍 如果识别到监控词的排名 进行读取并替换  最后直接读取文本 如果有排名的文本则进行上传 如果没有上传结果为fasle
    if (
      instr(名称, 分割监控产品[监控i]) == true ||
      名称 == 分割监控产品[监控i]
    ) {
      toastLog("识别到监控产品:第" + 排名 + "位的：" + 名称);
      分析数据(
        "记录监控",
        "替换并写入",
        分割监控产品[监控i],
        分割监控产品[监控i] + "|" + 排名 + "|" + 销量 + "|" + 价格
      );
      sleep(1500);
      return true;
    }
  }
}
function 分析数据(文本名称, 运行mode, 原检测词内容, 替换内容) {
  var 读取文本数据,
    行数,
    分割文本数据 = "";
  var 分割监控产品 = 监控产品名称;

  分割监控产品 = 分割监控产品.split("、");
  if (运行mode == "记录监控") {
    files.remove("/sdcard/药物信息.txt"); //
    files.remove("/sdcard/记录监控.txt"); //
    for (var 监控i = 0; 监控i < 分割监控产品.length; 监控i++) {
      compare(分割监控产品[监控i], 文本名称);
    }
  } else if (运行mode == "读取上传") {
    // 行数 = filereadline("/sdcard/" + 文本名称 + ".txt", 1)
    // for (var 行数i = 0; 行数i < 行数; 行数i++) {
    //     读取文本数据 = filereadline("/sdcard/" + 文本名称 + ".txt", 2, 行数i)//ins数据//QnetdatagetlineRows(0, "HMdata", true)
    //     if (读取文本数据 != "" && 读取文本数据 != "undefined" && 读取文本数据 != undefined) {
    //         分割文本数据 = 读取文本数据.split("|")
    //         if (Number(分割文本数据[1]) > 0) { // ranking产品排名（必须） //drugName产品名称（必须） //salesVolume销量（非必须）//price价格（非必须）
    //             log("存在排名 上传", 分割文本数据[0], 分割文本数据[1])
    //             子数据 = { "ranking": 分割文本数据[1], "drugName": 分割文本数据[0], "salesVolume": "", "price": "" }
    //         } else {
    //             log("没有找到排名", 分割文本数据[0])
    //             子数据 = { "ranking": "无结果", "drugName": 分割文本数据[0], "salesVolume": "", "price": "" }
    //         }
    //         数据合集.push(子数据)
    //         // for (var 监控i = 0; 监控i < 分割监控产品.length; 监控i++) {
    //         //     if (instr(分割文本数据[0], 分割监控产品[监控i]) || 分割文本数据[0] == 分割监控产品[监控i]) {
    //         //         if (Number(分割文本数据[1]) > 0) {
    //         //             log("存在排名 上传", 分割文本数据[0], 分割文本数据[1], 分割监控产品[监控i])
    //         //         } else {
    //         //             log("没有找到排名", 分割文本数据[0], 分割监控产品[监控i])
    //         //         }
    //         //         子数据 = {
    //         //             "ranking": 测试i,       // 产品排名（必须）
    //         //             "drugName": 测试i, //产品名称（必须）
    //         //             "salesVolume": 测试i,  //销量（非必须）
    //         //             "price": ""      //价格（非必须）
    //         //         }
    //         //         数据合集.push(子数据)
    //         //     }
    //         // }
    //     }
    // }
    // log("上传内容", 数据合集)
  } else if (运行mode == "替换并写入") {
    行数 = filereadline("/sdcard/" + 文本名称 + ".txt", 1);
    for (var 行数i = 0; 行数i < 行数; 行数i++) {
      读取文本数据 = filereadline("/sdcard/" + 文本名称 + ".txt", 2, 行数i); //ins数据//QnetdatagetlineRows(0, "HMdata", true)
      if (读取文本数据 == 原检测词内容) {
        // log(行数i, 读取文本数据, 原检测词内容)
        fileremoveline("/sdcard/" + 文本名称 + ".txt", 行数i);
        fileAppend("/sdcard/" + 文本名称 + ".txt", 替换内容);
      }
    }
  }
}
function 替换并写入(字符串, 替换内容, filename) {
  if (files.exists("/sdcard/" + filename + ".txt")) {
    var text = files.read("/sdcard/" + filename + ".txt");
    var regex = 字符串;
    var newText = text.replace(regex, "");
    toastLog("替换文本内容:" + 字符串);
    // console.log(newText);
    log(newText);
    files.write("/sdcard/" + filename + ".txt", newText);
    fileAppend("/sdcard/" + filename + ".txt", 替换内容);
  }
}
function fileremoveline(path, linenum) {
  var newcontent = "";
  content = files.read(path);
  line = content.split("\r\n");
  log(line.length);
  for (var i = 0; i < line.length; i++) {
    if (i != linenum - 1 && i != line.length - 1) {
      newcontent = newcontent + line[i] + "\r\n";
    } else if (i == line.length - 1) {
      newcontent = newcontent + line[i];
    }
  }
  files.write(path, newcontent, "utf-8");
}
function 药物识别过程A(文本名称, 运行模式) {
  var 药物名称,
    药物价格,
    药物销量,
    配送时间 = "",
    是否采集到 = false;
  if (运行模式 == "搜索") {
    var 药物temp = className("android.widget.TextView")
      .visibleToUser(true)
      .find(); //评论人
  } else {
    var 药物temp = className("android.widget.TextView").find(); //评论人
  }
  if (药物temp.length > 0) {
    for (var 药物i = 0; 药物i < 药物temp.length; 药物i++) {
      if (药物temp[药物i].text() != "") {
        log(药物temp[药物i].text());
        // if (instr(药物temp[药物i].text(), "[")) {//匹配待收货 //判断药物i+1 的药物信息是否符合
        //     药物销量 = 药物temp[药物i - 1].text()
        //     药物名称 = 药物temp[药物i].text()
        // }
        // if (运行模式 == "搜索") {
        //     if (instr(药物temp[药物i].text(), "¥") && instr(药物temp[药物i].text(), "送") == false) {//匹配待收货 //判断药物i+1 的药物信息是否符合
        //         药物价格 = 药物temp[药物i].text()
        //         if (instr(药物temp[药物i + 1].text(), "月售")) {
        //             药物销量 = 药物temp[药物i + 1].text()
        //         } else {
        //             药物销量 = 0
        //         }
        //         // log(药物销量, 药物名称, 药物价格 + "元")
        //         if (compare(药物销量 + "|" + 药物名称 + "|" + 药物价格 + "元", 文本名称)) {
        //             是否采集到 = true
        //         }

        //     }
        //     if (instr(药物temp[药物i].text(), "月售")) {//匹配待收货 //判断药物i+1 的药物信息是否符合
        //         药物销量 = 药物temp[药物i].text()

        //     }
        // } else {
        //     if (instr(药物temp[药物i].text(), "￥")) {//匹配待收货 //判断药物i+1 的药物信息是否符合
        //         药物价格 = 药物temp[药物i + 1].text()
        //     }
        //     if (instr(药物temp[药物i].text(), "分")) {//匹配待收货 //判断药物i+1 的药物信息是否符合
        //         配送时间 = 药物temp[药物i].text()
        //         log(药物销量, 药物名称, 药物价格 + "元")
        //         if (compare(药物销量 + "|" + 药物名称 + "|" + 药物价格 + "元", 文本名称)) {
        //             是否采集到 = true
        //         }
        //     }
        // }
      }
    }
  }
  if (是否采集到 == false) {
    return false;
  }
}
function classclick(key) {
  var s = className(key).visibleToUser(true).findOne(3);
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    click(s.bounds().centerX(), s.bounds().centerY());
    sleep(1000);
    return true;
  }
}
function 搜索买药(搜索词) {
  var cmp = 0;
  var 滑动次数 = 0;
  var 搜索超时 = 0;
  while (1) {
    sleep(1000);
    if (cmp == 0) {
      log("搜索超时：" + 搜索超时);
      if (搜索超时 >= 15) {
        toastLog("尝试返回");
        back();
        sleep(2500);
        back();
        sleep(2500);
      }
      if (descClick("看病买药")) {
        sleep(5000);
      }
      if (textExists("综合")) {
        搜索超时 = 0;
        cmp = 1;
      }
      if (textExists("买药")) {
        idClick("tv_search_carousel_text_item_text");
      } else {
        if (textExists("搜索")) {
          sleep(1500);
          if (classclick("android.widget.EditText")) {
            sleep(1000);
            setText(搜索词);
            sleep(1000);
            textClick("搜索");
          }
        }
      }
    } else if (cmp == 1) {
      if (textExists("综合")) {
        if (药物识别过程("药物信息", "搜索") == false) {
          gesture(random(600, 1500), [500, device.height * 0.85], [500, 300]);
          // 滑动次数 = 滑动次数 + 1
          // if (滑动次数 >= 5) {
          //     toastLog("未识别到监控产品")
          //     return true
          // }
        }
        if (排名位置 >= 21) {
          toastLog("超过排名 退出切换");
          return true;
        }
        if (textExists("已经到底啦")) {
          toastLog("采集完成");
          cmp = 2;
        }
      }
    } else if (cmp == 2) {
      if (textExists("搜索")) {
        cmp = 0;
      } else {
        back();
        sleep(2500);
      }
    }
  }
}
function 美团买药() {
  var 分割内容 = "";
  var 一级分类, 二级分类;
  if (分类名称 != "") {
    分割内容 = 分类名称.split("、");
    一级分类 = 分割内容[0];
    二级分类 = 分割内容[1];
    功能选择 = "分类";
  }
  var 开始采集 = false;
  var 采集完成 = 0;
  var 滑动次数 = 0;
  while (1) {
    sleep(1000);
    if (descClick("看病买药")) {
      sleep(1000);
    }
    if (功能选择 == "分类") {
      if (textExists("买药")) {
        toastLog("分类模式:" + 一级分类);
        if (textClick(一级分类)) {
          log("进入");
        }
      }
      if (textExists("全部")) {
        if (textClick(二级分类)) {
          log("进入二级分类");
          sleep(4500);
          开始采集 = true;
        }
      }
    } else if (功能选择 == "搜索") {
    }
    if (开始采集 == true) {
      if (药物识别过程("药物信息", "分类") == false) {
        gesture(random(600, 1500), [500, device.height * 0.85], [500, 300]);
        // 滑动次数 = 滑动次数 + 1
      }
      if (排名位置 >= 21) {
        toastLog("超过排名 退出切换");
        return true;
      }
      if (textExists("已经到底啦")) {
        采集完成 = 采集完成 + 1;
        toastLog("采集完成：" + 采集完成);
        if (采集完成 >= 3) {
          break;
        }
      }
    }
  }
}
function textetext(key) {
  var s = textContains(key).findOne(3);
  if (s == null) {
    return "";
    //  log("没有找到" + key)
  } else {
    // log("找到" + key)
    // log(s.text())
    // log(s.id())
    return s.text();
  }
}
function 复制订单号() {
  var 物流temp = textEndsWith("复制").find(); //评论人
  if (物流temp.length > 0) {
    for (var 物流i = 0; 物流i < 物流temp.length; 物流i++) {
      if (物流temp[物流i].text() != "") {
        if (instr(物流temp[物流i].text(), "收货地址")) {
          //匹配待收货 //判断物流i+1 的物流信息是否符合
          log(物流temp[物流i - 1].text());
          return 物流temp[物流i - 1].text();
        }
      }
    }
  }
}
function 识别昵称() {
  var 物流temp = className("android.widget.TextView").find(); //评论人
  log(物流temp.length);
  if (物流temp.length > 0) {
    for (var 物流i = 0; 物流i < 物流temp.length; 物流i++) {
      if (物流temp[物流i].text() != "") {
        if (instr(物流temp[物流i].text(), "收货地址")) {
          //匹配待收货 //判断物流i+1 的物流信息是否符合
          log(物流temp[物流i - 1].text());
          return 物流temp[物流i - 1].text();
        }
      }
    }
  }
}
function 查找退款(退款坐标x, 退款坐标y) {
  var 物流temp = className("android.widget.TextView").find(); //评论人
  log(物流temp.length);
  if (物流temp.length > 0) {
    for (var 物流i = 0; 物流i < 物流temp.length; 物流i++) {
      if (
        物流temp[物流i].text() != "" &&
        device.height > 物流temp[物流i].bounds().centerY() &&
        物流temp[物流i].bounds().centerY() > device.height / 11
      ) {
        if (
          instr(物流temp[物流i].text(), "申请退款") &&
          物流temp[物流i].bounds().centerX() > 200
        ) {
          //匹配待收货 //判断物流i+1 的物流信息是否符合
          log(
            物流temp[物流i].bounds().centerX(),
            物流temp[物流i].bounds().centerY(),
            退款坐标y
          );
          if (物流temp[物流i].bounds().centerY() == 退款坐标y) {
            物流temp[物流i].click();
            // click(Math.abs(物流temp[物流i].bounds().centerX()), 物流temp[物流i].bounds().centerY())
            break;
          }
        }
      }
    }
  }
}
function 查找确认() {
  var 物流temp = className("android.widget.TextView").find(); //评论人
  log(物流temp.length);
  if (物流temp.length > 0) {
    for (var 物流i = 0; 物流i < 物流temp.length; 物流i++) {
      if (物流temp[物流i].text() != "") {
        if (
          instr(物流temp[物流i].text(), "取消") &&
          物流temp[物流i].bounds().centerX() > 200
        ) {
          //匹配待收货 //判断物流i+1 的物流信息是否符合
          log(物流temp[物流i + 1].text());
          click(
            物流temp[物流i + 1].bounds().centerX(),
            物流temp[物流i + 1].bounds().centerY()
          );
          sleep(1000);
          break;
          // if (物流temp[物流i].bounds().centerY() == 退款坐标y) {
          //     物流temp[物流i].click()
          //     // click(Math.abs(物流temp[物流i].bounds().centerX()), 物流temp[物流i].bounds().centerY())
          //     break
          // }
        }
      }
    }
  }
}
function 实际收货功能(确认坐标x, 确认坐标y, 当前账号昵称) {
  var cmp = 1;
  var 订单编号;
  var 修改订单 = "";
  var 收货完成 = 0;
  while (1) {
    if (cmp == 1) {
      if (textExists("我的订单") && descExists("搜索")) {
        toastLog("未进入到订单页面");
        break;
      }
      sleep(1000);
      if (textExists("复制")) {
        修改订单 = "";
        toastLog("进入订单页面");
        sleep(1000);
        if (textClick("展开")) {
        } else {
          toastLog("开始识别物流信息");
          订单编号 = textetext("订单编号");
          if (识别物流信息("zhdatakd") == true) {
            toastLog("符合快递员信息");
            修改订单 = "收货";
            cmp = 2;
            Qnetdataset(
              "zhdatash",
              设备名称 + "|" + 当前账号昵称 + 订单编号,
              设备名称 + "|" + 当前账号昵称 + 订单编号,
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            );
          } else {
            toastLog("不符合 准备退货");
            修改订单 = "退货";
            cmp = 2;
            Qnetdataset(
              "zhdatath",
              设备名称 + "|" + 当前账号昵称 + 订单编号,
              设备名称 + "|" + 当前账号昵称 + 订单编号,
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            );
          }
        }
      }
      收货完成 = 0;
    } else if (cmp == 2) {
      // textClick("拒绝")
      textClick("仅在使用中允许");
      if (修改订单 == "收货") {
        if (textExists("翻转")) {
          toastLog("退出拍摄");
          back();
          sleep(2500);
        }
        if (textExists("立即领取")) {
          textClick("我的订单");
          sleep(1000);
          log("弹窗");
        }
        if (
          textExists("发表评价") ||
          textExists("提交评价") ||
          textExists("拍摄评价")
        ) {
          descClick("返回");
          sleep(1000);
        } else {
          if (textExists("我的订单") && descExists("搜索")) {
            if (收货完成 == 0) {
              toastLog("点击订单对应坐标:" + 确认坐标x + "|" + 确认坐标y);
              click(确认坐标x, 确认坐标y);
              sleep(2500);
              查找确认();
              收货完成 = 1;
            } else if (收货完成 == 1) {
              log("收货完成 继续");
              break;
            }
          }
        }
      } else if (修改订单 == "退货") {
        if (descClick("关闭")) {
          toastLog("可能无法申请售后");
          sleep(1000);
          // gesture(1000, [500, device.height * 0.85], [500, 300]);
          // sleep(1000)
          return false;
          break;
        }
        if (textExists("退货详情")) {
          log("退货详情");
          sleep(2500);
          if (textExists("退货详情")) {
            back();
            sleep(1500);
          }
        }
        if (textExists("申请说明")) {
        } else {
          if (
            textClick("我要退款（无需退货）") ||
            textClick("我要退款 (无需退货)")
          ) {
            sleep(1000);
          }
        }
        if (textExists("我的订单") && descExists("搜索")) {
          if (收货完成 == 0) {
            toastLog("查找退货坐标" + 确认坐标x + "|" + 确认坐标y);
            查找退款(确认坐标x, 确认坐标y);
            sleep(2500);
            收货完成 = 1;
          } else if (收货完成 == 1) {
            log("收货完成 继续");
            break;
          }
        }
        if (textExists("请选择收货状态") || textExists("请选择申请原因")) {
          toastLog("选择状态原因");
          sleep(1000);
          if (textClick("不想要了") || textClick("未收到货")) {
            sleep(1000);
          }
          if (textExists("请选择收货状态") || textExists("请选择申请原因")) {
            sleep(1000);
            textClick("收货状态");
          }
        } else {
          if (textExists("提交申请")) {
            sleep(1000);
            if (textClick("点击选择收货状态")) {
              sleep(1500);
            } else {
              if (textClick("点击选择申请原因")) {
                sleep(1500);
              } else {
                setText(2, 1);
                sleep(1000);
                if (textClick("提交申请")) {
                  sleep(1500);
                  if (textClick("提交申请")) {
                    sleep(1500);
                  }
                  收货完成 = 1;
                }
              }
            }
          } else {
            textClick("申请说明");
          }
        }
      }
      if (textExists("复制")) {
        back();
        sleep(2500);
      }
    }
  }
}
function 拼多多收货() {
  var 进入商品 = false;
  var cmp = 0;
  var 确认坐标x, 确认坐标y, 订单编号;
  var 修改订单 = "";
  var 收货完成 = 0;
  var 收货超时 = 0;
  var 当前账号昵称;
  while (1) {
    sleep(1000);
    if (textClick("个人中心")) {
      sleep(1000);
      当前账号昵称 = 识别昵称();
      toastLog("昵称:" + 当前账号昵称);
      if (当前账号昵称 != "") {
        textClick("待收货");
        sleep(1000);
      }
    }
    if (cmp == 0) {
      if (textExists("退货详情")) {
        log("退货详情");
        back();
        sleep(1500);
      }
      if (textExists("我的订单") && descExists("搜索")) {
        sleep(1500);
        进入商品 = false;
        log("开始查找");
        var 物流temp = textContains("").visibleToUser(true).find(); //评论人
        if (物流temp.length > 0) {
          for (var 物流i = 0; 物流i < 物流temp.length; 物流i++) {
            if (
              物流temp[物流i].text() != "" &&
              device.height > 物流temp[物流i].bounds().centerY() &&
              物流temp[物流i].bounds().centerY() > device.height / 11
            ) {
              if (instr(物流temp[物流i].text(), "确认收货")) {
                //匹配待收货 //判断物流i+1 的物流信息是否符合
                收货超时 = 0;
                if (物流temp[物流i + 1] != undefined) {
                  if (
                    物流temp[物流i + 1].text().length > 5 &&
                    device.height > 物流temp[物流i + 1].bounds().centerY() &&
                    物流temp[物流i + 1].bounds().centerY() > device.height / 11
                  ) {
                    //匹配派件签收
                    // text("待取件〡邮政快递包裹：您的快件已派送至【深圳布吉金坑山庄8巷十二号店】，自提点电话:18664397003，请您凭取件码领取快件，如有疑问请电联快递员【电话:13530700394】，投诉请致电11183。")
                    if (
                      instr(物流temp[物流i + 1].text(), "派送至") ||
                      instr(物流temp[物流i + 1].text(), "待取件") ||
                      instr(物流temp[物流i + 1].text(), "代收点") ||
                      instr(物流temp[物流i + 1].text(), "派件") ||
                      instr(物流temp[物流i + 1].text(), "签收") ||
                      instr(物流temp[物流i + 1].text(), "代收")
                    ) {
                      // if (compare(物流temp[物流i + 1].text(), "待收货")) {
                      // log("进入:" + 物流temp[物流i].text())
                      确认坐标x = 物流temp[物流i].bounds().centerX();
                      确认坐标y = 物流temp[物流i].bounds().centerY();
                      click(
                        物流temp[物流i + 1].bounds().centerX(),
                        物流temp[物流i + 1].bounds().centerY()
                      );
                      sleep(1000);
                      进入商品 = true;
                      // cmp = 1
                      if (
                        实际收货功能(确认坐标x, 确认坐标y, 当前账号昵称) ==
                        false
                      ) {
                        进入商品 = false;
                      }
                      // }
                    }
                  }
                }
              }
            }
          }
          if (进入商品 == false) {
            gesture(1000, [500, device.height * 0.85], [500, 300]);
            sleep(1000);
            收货超时 = 收货超时 + 1;
            toastLog("查找需要收货");
            if (收货超时 >= 5) {
              toastLog("全部收货完成");
              back();
              sleep(2500);
              exit();
            }
          }
        }
      }
    } else if (cmp == 1) {
      ///这段不使用
      if (textExists("复制")) {
        修改订单 = "";
        toastLog("进入订单页面");
        sleep(1000);
        if (textClick("展开")) {
        } else {
          toastLog("开始识别物流信息");
          订单编号 = textetext("订单编号");
          if (识别物流信息("zhdatakd") == true) {
            toastLog("符合快递员信息");
            修改订单 = "收货";
            cmp = 2;
            Qnetdataset(
              "zhdatash",
              设备名称 + "|" + 当前账号昵称 + 订单编号,
              设备名称 + "|" + 当前账号昵称 + 订单编号,
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            );
          } else {
            toastLog("不符合 准备退货");
            修改订单 = "退货";
            cmp = 2;
            Qnetdataset(
              "zhdatath",
              设备名称 + "|" + 当前账号昵称 + 订单编号,
              设备名称 + "|" + 当前账号昵称 + 订单编号,
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            );
          }
        }
      }
      收货完成 = 0;
    } else if (cmp == 2) {
      // textClick("拒绝")
      textClick("仅在使用中允许");
      if (修改订单 == "收货") {
        if (textExists("翻转")) {
          toastLog("退出拍摄");
          back();
          sleep(2500);
        }
        if (textExists("立即领取")) {
          textClick("我的订单");
          sleep(1000);
          log("弹窗");
        }
        if (
          textExists("发表评价") ||
          textExists("提交评价") ||
          textExists("拍摄评价")
        ) {
          descClick("返回");
          sleep(1000);
        } else {
          if (textExists("我的订单") && descExists("搜索")) {
            if (收货完成 == 0) {
              toastLog("点击订单对应坐标:" + 确认坐标x + "|" + 确认坐标y);
              click(确认坐标x, 确认坐标y);
              sleep(2500);
              查找确认();
              收货完成 = 1;
            } else if (收货完成 == 1) {
              cmp = 0;
              收货完成 = 0;
              log("收货完成 继续");
            }
          }
        }
      } else if (修改订单 == "退货") {
        if (descClick("关闭")) {
          toastLog("可能无法申请售后");
          gesture(1000, [500, device.height * 0.85], [500, 300]);
          sleep(1000);
          cmp = 0;
        }
        if (textExists("退货详情")) {
          log("退货详情");
          sleep(2500);
          if (textExists("退货详情")) {
            back();
            sleep(1500);
          }
        }
        if (textExists("申请说明")) {
        } else {
          if (
            textClick("我要退款（无需退货）") ||
            textClick("我要退款 (无需退货)")
          ) {
            sleep(1000);
          }
        }
        if (textExists("我的订单") && descExists("搜索")) {
          if (收货完成 == 0) {
            toastLog("查找退货坐标" + 确认坐标x + "|" + 确认坐标y);
            查找退款(确认坐标x, 确认坐标y);
            sleep(2500);
            收货完成 = 1;
          } else if (收货完成 == 1) {
            cmp = 0;
            收货完成 = 0;
            log("收货完成 继续");
          }
        }
        if (textExists("请选择收货状态") || textExists("请选择申请原因")) {
          toastLog("选择状态原因");
          sleep(1000);
          if (textClick("不想要了") || textClick("未收到货")) {
            sleep(1000);
          }
          if (textExists("请选择收货状态") || textExists("请选择申请原因")) {
            sleep(1000);
            textClick("收货状态");
          }
        } else {
          if (textExists("提交申请")) {
            sleep(1000);
            if (textClick("点击选择收货状态")) {
              sleep(1500);
            } else {
              if (textClick("点击选择申请原因")) {
                sleep(1500);
              } else {
                setText(2, 1);
                sleep(1000);
                if (textClick("提交申请")) {
                  sleep(1500);
                  if (textClick("提交申请")) {
                    sleep(1500);
                  }
                  收货完成 = 1;
                }
              }
            }
          } else {
            textClick("申请说明");
          }
        }
      }
      if (textExists("复制")) {
        back();
        sleep(2500);
      }
    }
  }
}
function 识别物流信息(文本名称) {
  var 行数 = filereadline("/sdcard/" + 文本名称 + ".txt", 1);
  var 文本数据; //= filereadline("/sdcard/" + 文本名称 + ".txt", 2, 随机行数)//ins数据//QnetdatagetlineRows(0, "HMdata", true)
  var 采集结果;
  for (var 读取i = 1; 读取i < 行数; 读取i++) {
    文本数据 = filereadline("/sdcard/" + 文本名称 + ".txt", 2, 读取i); //ins数据//QnetdatagetlineRows(0, "HMdata", true)
    if (文本数据 != "") {
      采集结果 = textetext(文本数据);
      if (instr(采集结果, 文本数据)) {
        if (instr(采集结果, "收货地址")) {
        } else {
          toastLog("识别到快递员" + 文本数据);
          return true;
        }
      }
    }
  }
  return false;
}
function getconfig() {
  temp = Qnetdataget("configP", "参数");
  if (temp != "") {
    设置筛选价格 = Number(temp.value1);
    // 价格区间1 = Number(temp.value1)
    // 价格区间2 = Number(temp.value2)
    设置运行时间 = Number(temp.value3);
    log(价格区间1, 价格区间2);
    log(设置运行时间);
    return temp.value1;
  }
  return false;
}
function 操作商品() {
  var 是否收藏 = 0;
  while (1) {
    sleep(1000);
    if (descClick("关闭")) {
      // text("立即支付 ¥1.14")
      log("关闭弹窗");
      sleep(2500);
    }
    if (textExists("客服") || textExists("更多") || textExists("店铺")) {
      if (textExists("已收藏")) {
        sleep(1000);
        log("已经收藏过");
        是否收藏 = 2;
      }
      if (是否收藏 == 0) {
        if (textClick("店铺")) {
          //店铺
          sleep(2500);
        } else {
          if (textClicknoV("更多")) {
            sleep(2000);
          }
        }
      } else if (是否收藏 == 1) {
        if (textClicknoV("更多")) {
        } else {
          if (descClick("收藏") || textClick("收藏")) {
            log("点击收藏");
            是否收藏 = 2;
          }
        }
      } else if (是否收藏 == 2) {
        log("此商品完成退出");
        back();
        sleep(1000);
      }
      //
    }
    // if (descExists("表情")) {
    //     log("识别到对话框")
    //     if (识别店铺关键词("zhdatapb") == true) {
    //         toastLog("进行收藏")
    //         是否收藏 = 1
    //         back()
    //         sleep(1500)
    //     } else {
    //         是否收藏 = 2
    //         back()
    //         sleep(1500)
    //     }
    // }
    if (textExists("全部商品")) {
      if (识别店铺关键词("zhdatapb") == true) {
        toastLog("进行收藏");
        是否收藏 = 1;
        back();
        sleep(1500);
      } else {
        是否收藏 = 2;
        back();
        sleep(1500);
      }
    }
    if (
      textExists("客服") ||
      textExists("全部商品") ||
      descExists("表情") ||
      textExists("更多") ||
      textExists("收藏")
    ) {
    } else {
      toastLog("未进入商品");
      return false;
    }
  }
}
function 拼多多搜索() {
  // launch("com.xunmeng.pinduoduo")
  var 进入商品 = false;
  var 获取搜索内容 = false;
  var 搜索内容 = "头绳";
  var cmp = 1;
  var 是否收藏 = 0;
  var 搜索第几个关键词 = 0;
  while (1) {
    sleep(1000);
    if (textExists("搜索")) {
      sleep(1500);
      if (获取搜索内容 == false) {
        搜索第几个关键词 = 搜索第几个关键词 + 1;
        搜索内容 = 获取搜索关键词("zhdatass", 搜索第几个关键词);
        log("搜索:" + 搜索内容);
        if (搜索内容 != "") {
          setText(搜索内容);
          sleep(1000);
          textClick("搜索");
          sleep(2150);
          获取搜索内容 = true;
        } else {
          toastLog("未获取到数据内容");
        }
      }
    }
    if (textClick("首页")) {
      sleep(2500);
      log("搜索");
      click(540, 100);
      sleep(2500);
    }
    if (cmp == 0) {
      if (textExists("重置")) {
        log("输入价格区间:" + 价格区间1 + "|" + 价格区间2);
        sleep(800);
        setText(0, 价格区间1);
        setText(1, 价格区间2);
        sleep(1800);
        if (click("确定（")) {
          sleep(2500);
          cmp = 1;
        }
      } else {
        if (textClick("筛选")) {
          log("点击筛选");
          sleep(1000);
        }
      }
    } else if (cmp == 1) {
      if (总运行 >= 设置运行时间) {
        toastLog("到达设置运行时间 切换搜索词");
        back();
        sleep(2500);
        back();
        sleep(2500);
        cmp = 0;
        获取搜索内容 = false;
        总运行 = 0;
      } else {
        if (descClick("关闭")) {
          // text("立即支付 ¥1.14")
          log("关闭弹窗");
        }
        if (textExists("客服") || textExists("全部商品")) {
        } else {
          进入商品 = false;
        }
        if (textExists("筛选") || 进入商品 == false) {
          log("查找商品中...");
          // var 评论temp = idEndsWith("tv_title").find()//评论人
          var 评论temp = textContains("0.").find();
          if (评论temp.length > 0) {
            for (var 评论i = 0; 评论i < 评论temp.length; 评论i++) {
              if (
                评论temp[评论i].text() != "" &&
                device.height > 评论temp[评论i].bounds().centerY() &&
                评论temp[评论i].bounds().centerY() > device.height / 11
              ) {
                // if (compare(评论temp[评论i].text(), "商品名称")) {
                if (设置筛选价格 >= Number(评论temp[评论i].text())) {
                  toastLog("符合商品价格:" + 评论temp[评论i].text());
                  click(
                    评论temp[评论i].bounds().centerX(),
                    评论temp[评论i].bounds().centerY() - 20
                  );
                  sleep(1000);
                  是否收藏 = 0;
                  进入商品 = true;
                  操作商品();
                  // cmp = 2
                  // break
                }
                // }
              }
            }
            // if (进入商品 == false) {
            gesture(1000, [500, device.height * 0.85], [500, 300]);
            // }
          }
        }
      }
    } else if (cmp == 2) {
      if (descClick("关闭")) {
        // text("立即支付 ¥1.14")
        log("关闭弹窗");
      }
      if (textExists("店铺") && textExists("收藏")) {
        if (textExists("已收藏")) {
          sleep(1000);
          log("已经收藏过");
          是否收藏 = 2;
        }
        if (是否收藏 == 0) {
          if (textClick("店铺")) {
            sleep(2500);
          }
        } else if (是否收藏 == 1) {
          if (descClick("收藏") || textClick("收藏")) {
            log("点击收藏");
          }
          是否收藏 = 2;
        } else if (是否收藏 == 2) {
          log("此商品完成退出");
          back();
          sleep(1000);
          cmp = 1;
        }
        //
      }
      if (textExists("全部商品")) {
        if (识别店铺关键词("zhdatapb") == true) {
          toastLog("进行收藏");
          是否收藏 = 1;
          back();
          sleep(1500);
        } else {
          是否收藏 = 2;
          back();
          sleep(1500);
        }
      }
      if (textExists("客服") || textExists("全部商品")) {
      } else {
        toastLog("未进入商品");
        cmp = 1;
      }
    }
  }
}
function 识别店铺关键词(文本名称) {
  var 店铺名称 = "";

  var 店铺temp = className("android.widget.TextView").find(); //评论人
  log(店铺temp.length);
  if (店铺temp.length > 0) {
    for (var 评论i = 0; 评论i < 店铺temp.length; 评论i++) {
      if (店铺temp[评论i].text() != "" && 店铺temp[评论i].text().length > 1) {
        // log(店铺temp[评论i].text())
        if (
          instr(店铺temp[评论i].text(), "客服") ||
          店铺temp[评论i].text() == "客服"
        ) {
          店铺名称 = 店铺temp[评论i - 4].text();
          if (instr(店铺名称, "年老店")) {
            店铺名称 = 店铺temp[评论i - 5].text();
          }
          break;
        }
      }
    }
  }

  log("店铺名称:" + 店铺名称);
  if (compare(店铺名称, "今日收藏") == false) {
    log("今日收藏过此店铺");
    return false;
  }
  if (店铺名称 == "") {
    return false;
  }
  var 行数 = filereadline("/sdcard/" + 文本名称 + ".txt", 1);
  var 文本数据; //= filereadline("/sdcard/" + 文本名称 + ".txt", 2, 随机行数)//ins数据//QnetdatagetlineRows(0, "HMdata", true)
  for (var 读取i = 0; 读取i < 行数; 读取i++) {
    文本数据 = filereadline("/sdcard/" + 文本名称 + ".txt", 2, 读取i); //ins数据//QnetdatagetlineRows(0, "HMdata", true)
    if (instr(店铺名称, 文本数据) || 店铺名称 == 文本数据) {
      toastLog("识别到关键词:" + 文本数据 + "不进行收藏");
      return false;
    }
  }
  return true;
}
function 读取内容(文本名称, 是否删除, 是否随机) {
  while (1) {
    var 行数 = filereadline("/sdcard/" + 文本名称 + ".txt", 1);
    var 随机行数 = random(1, 行数);
    if (是否随机 == false) {
      随机行数 = 1;
    }
    if (是否随机 > 0) {
      随机行数 = 是否随机;
      if (随机行数 > 行数) {
        return "文本空";
      }
    }
    var number = filereadline("/sdcard/" + 文本名称 + ".txt", 2, 随机行数); //ins数据//QnetdatagetlineRows(0, "HMdata", true)
    log(number, 行数);
    if (number != "" && 行数 > 0) {
      log("获取到的" + 文本名称 + "：" + number);
      if (是否删除 == true) {
        toastLog("删除：" + number);
        删除文本内指定字符(number + "\r\n", 文本名称);
        删除文本内指定字符(number, 文本名称);
        行数 = filereadline("/sdcard/" + 文本名称 + ".txt", 1);
        log("文本剩余数量:" + 行数);
        // fileremoveline("/sdcard/" + 文本名称 + ".txt", 随机行数)
        // if (行数 == 1) {
        //     toastLog("已经全部使用完成")
        //     log("清除..")
        //     files.remove("/sdcard/" + 文本名称 + ".txt")
        //     sleep(1000)
        //     files.create("/sdcard/" + 文本名称 + ".txt")
        //     exit()
        // }
      }
      return number;
    } else {
      // if (number == "" && 行数 == 1) {
      //     if (是否删除 == true) {
      //         fileremoveline("/sdcard/" + 文本名称 + ".txt", 随机行数)
      //         log("清除..")
      //         files.remove("/sdcard/" + 文本名称 + ".txt")
      //         sleep(1000)
      //         files.create("/sdcard/" + 文本名称 + ".txt")
      //         return "文本空"
      //     }
      //     toastLog("没有获取到数据 已经全部使用完成")
      //     // return ""
      // } else {
      //     if (行数 < 0 || 行数 == 0) {
      //         while (1) {
      //             toastLog("文本已使用完" + 文本名称 + "请补充后再重新运行")
      //             sleep(5000)
      //         }
      //     }
      //     sleep(5000)
      // }
    }
    sleep(1000);
  }
}
function textExistsCon(key) {
  var s = textContains(key).visibleToUser(true).findOne(3);
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    return true;
  }
}
function 删除文本内指定字符(字符串, filename) {
  if (files.exists("/sdcard/" + filename + ".txt")) {
    var text = files.read("/sdcard/" + filename + ".txt");
    var regex = 字符串;
    var newText = text.replace(regex, "");
    toastLog("删除文本内容:" + 字符串);
    // console.log(newText);
    files.write("/sdcard/" + filename + ".txt", newText);
  }
}
function filereadline(path, pattern, linenum) {
  //pattern =1 get linesnumber pattern =2 get the line content pattern =3 randline content
  var content,
    x,
    linesnumber = 0;
  var line = new Array();
  content = files.read(path);
  line = content.split("\r\n");
  if (pattern == 1) {
    for (x in line) {
      //  log(line[x])
      linesnumber = linesnumber + 1;
    }
    // log(linesnumber)
    return linesnumber;
  } else if (pattern == 2) {
    //  log( line[linenum-1])
    return line[linenum - 1];
  } else if (pattern == 3) {
    for (x in line) {
      //  log(line[x])
      linesnumber = linesnumber + 1;
    }
    return line[Math.floor(Math.random() * linesnumber)];
  }
}
function 获取搜索关键词(table, 读取行数) {
  var 数据数量 = Qnetdatacount(table);
  var 数据内容 = "";
  if (读取行数 <= 数据数量) {
    数据内容 = 获取一条数据(table, false, 读取行数, false);
  }
  return 数据内容;
}
function 下载云端数据(table) {
  files.remove("/sdcard/" + table + ".txt");
  var 数据数量 = Qnetdatacount(table);
  var 数据内容 = "";
  for (var 数据i = 0; 数据i < 数据数量; 数据i++) {
    数据内容 = 获取一条数据(table, false, 数据i, false);
    log(数据i + "下载数据中:" + 数据内容);
    compare(数据内容, table);
  }
}

// function 上传采集数据() {
//     var 分类 = "MeituanClassification"
//     try {
//         res = http.post("http://8.219.190.190:8181/openApi/dataAnalysis", {
//             "collectStatus": "true",
//             "region": "beijing",
//             "queryType": 分类,
//             "queryCriteria": "儿童用药",
//             "list": [
//                 {

//                 },
//             ],
//         });
//         html = res.body.json();

//         //log("html:"+html)
//     } catch (e) {
//         toastLog("服务器链接异常, 5s后重新尝试获取.")
//         sleep(5000)
//         html = "false"
//     }
// }

function QnetdatagetlineRandRows(table, isdel) {
  //获取其中一行  行数 表名  获取后是否删除
  var randRow = random(0, Qnetdatacount(table) - 1);
  var res, html;
  while (true) {
    try {
      res = http.post(url, {
        action: "getrows",
        startrow: randRow,
        rows: "1",
        table: table,
        isdel: isdel,
      });
      html = res.body.json();

      //log("html:"+html)
    } catch (e) {
      toastLog("服务器链接异常, 5s后重新尝试获取.");
      sleep(5000);
      html = "false";
    }
    if (html == "") {
      log("没有获取到数据.");
      return "null";
    } else {
      log("1html:" + html[0].key);
      return html[0].key;
    }
  }
}

function 获取一条数据(table, 是否随机, 读取行数, isdel) {
  //获取其中一行  行数 表名  获取后是否删除
  var randRow;
  if (是否随机 == true) {
    randRow = random(0, Qnetdatacount(table) - 1);
    log("是否随机：" + randRow);
  } else {
    randRow = 读取行数;
  }
  var res, html;
  while (true) {
    try {
      res = http.post(url, {
        action: "getrows",
        startrow: randRow,
        rows: "1",
        table: table,
        isdel: isdel,
      });
      html = res.body.json();

      //log("html:"+html)
    } catch (e) {
      toastLog("服务器链接异常, 5s后重新尝试获取.");
      sleep(5000);
      html = "false";
    }
    if (html == "") {
      log("没有获取到数据.");
      return "null";
    } else {
      // log("1html:" + html[0].key)
      return html[0].value1;
    }
  }
}
function Qnetdatacount(table) {
  while (true) {
    try {
      var res = http.post(url, {
        action: "count",
        key: "",
        value: "",
        type: "string",
        table: table,
      });
      var html = res.body.json();
      // if (html == null) {
      //  return "null"
      //} else {
      //    result = html
      // log(result)
      //    return result
      //}
    } catch (e) {
      toastLog("服务器链接异常, 5s后重新尝试获取.");
      sleep(5000);
      html = "false";
    }
    if (html == "") {
      log("没有获取到数据.");
      return "null";
    } else {
      //log("html:" + html)
      return html;
    }
  }
}

function id符合并点击(key, text) {
  var s = idEndsWith(key).visibleToUser(true).findOne(3);
  if (s == null) {
    return "";
    //  log("没有找到" + key)
  } else {
    log(s.text());
    if (s.text() != "") {
      if (s.text() == text) {
        click(s.bounds().centerX(), s.bounds().centerY());
        sleep(2500);
        return true;
      }
    }
    // if (s.text() == "") {
    //     return s.desc()
    // } else {
    //     return s.text()
    // }
  }
}

function QnetdatagetlineRows(table, isdel) {
  //获取其中一行  行数 表名  获取后是否删除
  //var randRow = rand(1, (Qnetdatacount(table) - 1))
  var res, html;
  while (true) {
    try {
      res = http.post(url, {
        action: "getrows",
        startrow: "0",
        rows: "1",
        table: table,
        isdel: isdel,
      });
      html = res.body.json();
      //log("html:"+html)
    } catch (e) {
      log("服务器链接异常, 5s后重新尝试获取.");
      sleep(5000);
      html = "false";
    }
    if (html != "false") {
      log("html:" + html);
      return html;
    }
  }
}
function 发送图片(是否发送图片) {
  while (1) {
    sleep(1000);
    idClick("iiz"); //+
    idClick("b0c"); //相册
    textClick("相册");
    if (textExists("发送")) {
      sleep(1000);
      if (idClick("e2k")) {
        sleep(1000);
        if (textClick("发送 1")) {
          sleep(1500);
        }
      }
    }
  }
}
function Qnetdataget(table, key, isdel) {
  //下载 键,表名, , 返回数值
  var result, res, html;
  while (true) {
    try {
      res = http.post(url, {
        action: "get",
        key: key,
        value: "",
        type: "string",
        table: table,
        isdel: "false",
      });
      html = res.body.json();
      // log("html:" + html)
    } catch (e) {
      log("没有获取到数据.");
      html = "false";
    }
    if (html == "false") {
      log(key + "服务器链接异常, 5s后重新尝试获取.");
      sleep(5000);
    } else if (html == null || html == "null") {
      log("返回值为null");
      return "";
    } else {
      return html;
    }
  }
}

function QnetdataInit(table, isdel) {
  var res = http.post(url, {
    action: "init",
    table: table,
    isdel: isdel,
  });
  var html = res.body.string();
  log("QnetdataInit:" + html);
}
function Qnetdataset(
  table,
  key,
  value1,
  value2,
  value3,
  value4,
  value5,
  value6,
  value7,
  value8,
  value9,
  value10,
  value11,
  value12,
  value13,
  value14,
  value15,
  value16,
  value17,
  value18,
  value19,
  value20
) {
  //上传  键,  值  表名
  var html, res;
  while (true) {
    try {
      res = http.post(url, {
        action: "set",
        key: key,
        value1: value1,
        value2: value2,
        value3: value3,
        value4: value4,
        value5: value5,
        value6: value6,
        value7: value7,
        value8: value8,
        value9: value9,
        value10: value10,
        value11: value11,
        value12: value12,
        value13: value13,
        value14: value14,
        value15: value15,
        value16: value16,
        value17: value17,
        value18: value18,
        value19: value19,
        value20: value20,
        type: "string",
        table: table,
      });
      html = res.body.json();
    } catch (e) {
      html = "null";
    }
    if (html != "null" && html != "null") {
      log("html:", html);
      return html;
    } else {
      log("服务器链接异常,5s后重试.");
      sleep(5000);
    }
  }
}
function Qnetdataset5times(
  table,
  key,
  value1,
  value2,
  value3,
  value4,
  value5,
  value6,
  value7,
  value8,
  value9,
  value10,
  value11,
  value12,
  value13,
  value14,
  value15,
  value16,
  value17,
  value18,
  value19,
  value20
) {
  //上传  键,  值  表名
  var html, res;
  var times_ = 0;
  while (true) {
    try {
      res = http.post(url, {
        action: "set",
        key: key,
        value1: value1,
        value2: value2,
        value3: value3,
        value4: value4,
        value5: value5,
        value6: value6,
        value7: value7,
        value8: value8,
        value9: value9,
        value10: value10,
        value11: value11,
        value12: value12,
        value13: value13,
        value14: value14,
        value15: value15,
        value16: value16,
        value17: value17,
        value18: value18,
        value19: value19,
        value20: value20,
        type: "string",
        table: table,
      });
      html = res.body.json();
    } catch (e) {
      html = "null";
    }
    if (html != "null" && html != "null") {
      if (html == "1") {
        log("!!!回传消息成功！！！");
        return html;
      } else {
        sleep(100);
        times_ = times_ + 1;
        log("html:", html);
        if (times_ >= 5) {
          log("!!!回传失败！XXXX！！");
          return html;
        }
      }
    } else {
      log("服务器链接异常,5s后重试.");
      sleep(5000);
    }
  }
}
function idExistsText(key) {
  var s = idEndsWith(key).findOne(3);
  if (s == null) {
    return "";
    //  log("没有找到" + key)
  } else {
    if (s.text() == "") {
      return s.desc();
    } else {
      return s.text();
    }
  }
}
function base64(str) {
  return java.lang.String(
    android.util.Base64.encode(java.lang.String(str).getBytes(), 2)
  );
}
function 遍历父控件的子控件(控件信息) {
  log("遍历信息");
  for (var i = 0; i < 控件信息.childCount(); i++) {
    //g5h 搜索页视频id e77推荐页
    log(控件信息.child(i).id(), 控件信息.child(i).text());
    if (控件信息.child(i).id() == "com.xingin.xhs:id/e77") {
      //g5h视频id
      return "视频";
    }
    if (控件信息.child(i).id() == "com.xingin.xhs:id/i76") {
      //g6q标题id id = i76
      // log(当前帖子标题)
    }
  }
  return "文图";
}
function idExists(key) {
  var s = idEndsWith(key).visibleToUser(true).findOnce();
  if (s == null) {
    //log("没有找到" + key)
  } else {
    // log(s)
    //log("找到" + key)
    //s.click()
    // Tap(s.bounds().centerX(), s.bounds().centerY())
    return true;
  }
}
function textClickXY(key, x1, y1) {
  var s = textEndsWith(key).visibleToUser(true).findOnce();
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    // log("找到————————" + s.text() + " x:" + s.bounds().centerX() + " y:" + s.bounds().centerY())
    click(s.bounds().centerX() + x1, s.bounds().centerY() + y1);
    return true;
  }
}
function textClicknoV(key) {
  var s = textEndsWith(key).findOnce();
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    log("找到————————" + s.text());
    click(s.bounds().centerX(), s.bounds().centerY());
    return true;
  }
}
function textClick(key) {
  var s = textEndsWith(key).visibleToUser(true).findOnce();
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    log("找到————————" + s.text());
    click(s.bounds().centerX(), s.bounds().centerY());
    return true;
  }
}
function idClick(key) {
  var s = idEndsWith(key).visibleToUser(true).findOnce();
  if (s == null) {
    //log("没有找到" + key)
  } else {
    // log(s)
    //log("找到" + key)
    //s.click()
    if (key == "a3j") {
      log(s.bounds().centerX() - 15, s.bounds().centerY());
      click(s.bounds().centerX() - 15, s.bounds().centerY());
    } else {
      click(s.bounds().centerX(), s.bounds().centerY());
    }

    return true;
  }
}
function textExists(key) {
  var s = textEndsWith(key).visibleToUser(true).findOnce();
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    return true;
  }
}
function descExistsCon(key) {
  var s = descContains(key).visibleToUser(true).findOne(3);
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    log("找到" + key);
    // s.click()
    return true;
  }
}
function descExists(key) {
  var s = descEndsWith(key).visibleToUser(true).findOne(3);
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    if (s.desc() == key) {
      // log("找到" + key)
      // s.click()
      return true;
    }
  }
}
function descClickCon(key) {
  var s = descContains(key).visibleToUser(true).findOne(3);
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    log("找到" + key);
    // s.click()
    click(s.bounds().centerX(), s.bounds().centerY());
    return true;
  }
}
function descClick(key) {
  var s = descEndsWith(key).findOne(3);
  if (s == null) {
    return false;
    //  log("没有找到" + key)
  } else {
    if (s.desc() == key) {
      log("找到" + key);
      // s.click()
      click(s.bounds().centerX(), s.bounds().centerY());
      return true;
    }
  }
}
function instr(e, s) {
  ttemp = e.indexOf(s);
  if (ttemp > -1) {
    return true;
  } else {
    return false;
  }
}

function 当前时间戳() {
  return Date.parse(new Date());
}

function strIndex(string1, string2) {
  result = string1.indexOf(string2);
  log(result);
  return result;
}

function compare(string1, filename) {
  files.create("/sdcard/" + filename + ".txt");
  record = files.read("/sdcard/" + filename + ".txt");
  if (instr(record, string1)) {
    // toast("存在：" + string1)
    return false;
  } else {
    fileAppend("/sdcard/" + filename + ".txt", string1);
    // log("写入:" + string1)
    return true;
  }
} //数据对比函数
function fileAppend(path, content_) {
  //20211216修改为第二行保存
  files.create(path);
  var newcontent = "";
  content = files.read(path);
  line = content.split("\r\n");
  // log(line.length)
  for (var i = 0; i < line.length - 1; i++) {
    newcontent = newcontent + line[i] + "\r\n";
  }
  newcontent = newcontent + content_ + "\r\n";
  // log(newcontent)
  files.write(path, newcontent, "utf-8");
}
function 小时() {
  //2024-08-30 08.32.33
  return new java.text.SimpleDateFormat("HH").format(new Date());
}
function load_Time() {
  //2024-08-30 08.32.33
  return new java.text.SimpleDateFormat("yyyy-MM-dd HH.mm.ss").format(
    new Date()
  );
}

function 函数_注册码验证() {
  if (函数_执行注册登录()) {
    log("登录成功，剩余分钟" + 信息剩余分钟);
    log("\n\n" + 函数_获取注册码验证() + "\n\n");
    sleep(5500);
    if (信息登录方式) {
      if (!函数_设置注册码备注(备注手机号码)) {
        return false;
      }
    }

    return true;
  } else {
    sleep(5500);
    log("登录失败，错误内容:" + 信息错误内容);
    return false;
  }
}
//-----------------------------------------------------------

function 函数_执行注册登录() {
  信息机器码 = 本机机器码;
  if (信息机器码.length < 14) {
    信息错误内容 =
      "返回错误:该机器不能完成注册\n请联系你的上级代理\n该机器部分平台不允许注册";
    return false;
  }
  //信息注册码=storage.get("KEY");
  if (执行参数验证("机器码,注册码,项目名称")) {
    var 请求 = "flag=注册码登录";
    请求 = 请求 + "&机器码=" + 信息机器码;
    请求 = 请求 + "&注册码=" + 信息注册码;
    请求 = 请求 + "&项目名称=" + 信息项目名称;
    var 返回值 = 获取通讯请求(请求);
    log(返回值);
    if (返回值 != "") {
      var arr = 返回值.split("|");
      var len = arr.length;
      if (len === 1) {
        信息错误内容 = "连接服务器失败\n请检查网络是否开启";
      } else if (len != 3) {
        信息错误内容 = "返回错误:" + 返回值;
      } else {
        if (!是否整型(arr[1])) {
          信息错误内容 = "剩余时间内容错误:" + arr[1];
        } else if (arr[3] === "") {
          //获取不到令牌
          信息错误内容 = "返回错误:获取不到访问令牌:" + arr[1];
        } else {
          var 剩余分钟 = parseInt(arr[1]);
          信息剩余分钟 = 剩余分钟;
          信息访问令牌 = arr[2];
          //判断是否过期
          if (剩余分钟 > 0) {
            信息登录状态 = "注册登录";
            return true;
          } else {
            信息错误内容 = "注册过期,剩余分钟:" + 剩余分钟;
          }
        }
      }
    }
  }
  return false;
}
//-----------------------------------------------------------
function 函数_获取注册码验证() {
  //验证参数
  if (执行参数验证("机器码,注册码,访问令牌,项目名称")) {
    //参数无误,发送请求
    var 请求 = "flag=注册码验证";
    请求 = 请求 + "&机器码=" + 信息机器码; //由登录获取
    请求 = 请求 + "&注册码=" + 信息注册码; //由登录获取
    请求 = 请求 + "&访问令牌=" + 信息访问令牌; //由登录获取
    请求 = 请求 + "&项目名称=" + 信息项目名称;
    var 返回值 = 获取通讯请求(请求);
    if (返回值 != "") {
      //返回:激活时间|到期时间|登陆时间|验证时间
      //返回:2016-12-29 15:12:04|2017-02-27 14:02:04|2017-01-10 13:59:09|2017-01-10 13:59:09
      var arr = 返回值.split("|");
      var len = arr.length;
      if (len === 4) {
        //返回格式正确
        函数_获取注册码备注();
        信息激活时间 = arr[0];
        信息到期时间 = arr[1];
        信息登录时间 = arr[2];
        信息验证时间 = arr[3];
        return (
          "激活时间:" +
          信息激活时间 +
          "\n到期时间:" +
          信息到期时间 +
          "\n登录时间:" +
          信息登录时间 +
          "\n验证时间:" +
          信息验证时间
        );
      } else {
        信息错误内容 = "返回错误:" + 返回值;
      }
    } else {
      return 信息错误内容;
    }
  } else {
    return 信息错误内容;
  }
}
//-----------------------------------------------------------
function 函数_获取项目公告() {
  if (执行参数验证("项目名称")) {
    var 请求 = "flag=获取项目公告&项目名称=" + 信息项目名称;
    var 返回值 = 获取通讯请求(请求);
    if (信息错误内容 === "") {
      //通讯成功，判断返回值
      if (返回值 == "") {
        return "操作失败:公告为空";
      } else {
        return 返回值;
      }
    }
  } else {
    return 信息错误内容;
  }
}
//-----------------------------------------------------------
function 函数_获取剩余分钟() {
  //根据登录方式, 获取对应的剩余分钟
  var 请求;
  var 返回值;
  if (信息登录状态 === "注册登录") {
    //验证参数
    if (执行参数验证("机器码,注册码,访问令牌,项目名称")) {
      请求 = "flag=查询注册码时间";
      请求 = 请求 + "&机器码=" + 信息机器码;
      请求 = 请求 + "&注册码=" + 信息注册码;
      请求 = 请求 + "&访问令牌=" + 信息访问令牌;
      请求 = 请求 + "&项目名称=" + 信息项目名称;
      返回值 = 获取通讯请求(请求);
      if (返回值 != "") {
        if (是否整型(返回值)) {
          信息剩余分钟 = parseInt(返回值);
          return 信息剩余分钟;
        } else {
          信息错误内容 = "返回错误:返回值非数字内容:" + 返回值;
        }
      }
    }
  } else if (信息登录状态 == "试用登录") {
    //验证参数
    if (执行参数验证("机器码,项目名称")) {
      请求 = "flag=试用时间";
      请求 = 请求 + "&机器码=" + 信息机器码;
      请求 = 请求 + "&项目名称=" + 信息项目名称;
      返回值 = 获取通讯请求(请求);
      if (返回值 != "") {
        if (是否整型(返回值)) {
          信息剩余分钟 = parseInt(返回值);
          return 信息剩余分钟;
        } else {
          信息错误内容 = "返回错误:返回值非数字内容:" + 返回值;
        }
      }
    }
  } else {
    信息错误内容 = "操作失败:尚未登录无法获取剩余分钟";
  }
  return -1;
}
//-----------------------------------------------------------
function 函数_设置注册码备注(内容) {
  if (备注链接数 === 0) {
    函数_获取注册码备注();
  }
  if (备注链接数 >= 2) {
    内容 = 内容 + "|" + 备注用户姓名;
  }
  if (备注链接数 >= 3) {
    内容 = 内容 + "|" + 备注机器编号;
  }
  if (备注链接数 >= 4) {
    内容 = 内容 + "|" + 备注其他内容;
  }
  if (执行参数验证("机器码,注册码,访问令牌,项目名称")) {
    var 请求 = "flag=注册码设置备注";
    请求 = 请求 + "&机器码=" + 信息机器码;
    请求 = 请求 + "&注册码=" + 信息注册码;
    请求 = 请求 + "&访问令牌=" + 信息访问令牌;
    请求 = 请求 + "&项目名称=" + 信息项目名称;
    请求 = 请求 + "&备注=" + 内容;
    var 返回值 = 获取通讯请求(请求);
    if (返回值.indexOf("设置成功") > -1) {
      return true;
    } else {
      信息错误内容 = "设置失败：" + 返回值;
    }
  }
  return false;
}
//-----------------------------------------------------------
function 函数_获取注册码备注() {
  if (执行参数验证("机器码,注册码,访问令牌,项目名称")) {
    var 请求 = "flag=注册码获取备注";
    请求 = 请求 + "&机器码=" + 信息机器码;
    请求 = 请求 + "&注册码=" + 信息注册码;
    请求 = 请求 + "&访问令牌=" + 信息访问令牌;
    请求 = 请求 + "&项目名称=" + 信息项目名称;
    var 返回值 = 获取通讯请求(请求);
    if (信息错误内容 === "") {
      //通讯成功，判断返回值
      if (返回值 === "") {
        return "操作失败:备注为空";
      }
      return 返回值;
    }
  } else {
    return 信息错误内容;
  }
}
//-----------------------------------------------------------
function 函数_获取自定义数据(key值) {
  //在"自定义数据"里自己设定一些参数值内容,给脚本去获取
  if (执行参数验证("机器码,注册码,访问令牌,项目名称")) {
    var 请求 = "flag=获取项目键名称值";
    请求 = 请求 + "&项目键名称=" + key值;
    请求 = 请求 + "&机器码=" + 信息机器码;
    请求 = 请求 + "&注册码=" + 信息注册码;
    请求 = 请求 + "&访问令牌=" + 信息访问令牌;
    请求 = 请求 + "&项目名称=" + 信息项目名称;
    var 返回值 = 获取通讯请求(请求);
    if (信息错误内容 === "") {
      //通讯成功，判断返回值
      if (返回值 === "") {
        return "操作失败:自定义数据为空";
      } else {
        return 返回值;
      }
    }
  } else {
    return 信息错误内容;
  }
}
//-----------------------------------------------------------
function 函数_发送监控消息(规则名称, 详情) {
  if (执行参数验证("注册码")) {
    var 请求 = "flag=插入监控数据";
    请求 = 请求 + "&注册码=" + 信息注册码;
    请求 = 请求 + "&规则名称=" + 规则名称;
    请求 = 请求 + "&详情=" + 详情;
    var 返回值 = 获取通讯请求(请求);
    if (返回值 != "") {
      if (返回值 === "发送成功") {
        return true;
      } else {
        信息错误内容 = "发送监控异常:" + 返回值;
      }
    }
  }
  return false;
}
//-----------------------------------------------------------
function 函数_执行以卡充卡(新卡, 老卡) {
  if (新卡 === "") {
    信息错误内容 = "参数错误:新卡注册码不可为空";
  } else if (新卡.length != 32) {
    信息错误内容 = "参数错误:新卡注册码位数非32位,请确认注册码完整性";
  } else if (老卡 === "") {
    信息错误内容 = "参数错误:老卡注册码不可为空";
  } else if (老卡.length != 32) {
    信息错误内容 = "参数错误:老卡注册码位数非32位,请确认注册码完整性";
  } else {
    信息错误内容 = "";
    var 请求 = "flag=以卡充卡";
    请求 = 请求 + "&新卡=" + 新卡;
    请求 = 请求 + "&老卡=" + 老卡;
    var 返回值 = 获取通讯请求(请求);
    if (返回值 != "") {
      if (返回值 === "OK") {
        return true;
      } else {
        信息错误内容 = "充值异常:" + 返回值;
      }
    }
  }
  return false;
}
//-----------------------------------------------------------
function 函数_执行注册码退出() {
  if (执行参数验证("注册码,访问令牌")) {
    var 请求 = "flag=注册码退出";
    请求 = 请求 + "&注册码=" + 信息注册码;
    请求 = 请求 + "&访问令牌=" + 信息访问令牌;
    var 返回值 = 获取通讯请求(请求);
    if (返回值 != "") {
      if (返回值 === "操作成功") {
        return true;
      } else {
        信息错误内容 = "退出异常:" + 返回值;
      }
    }
  }
  return false;
}
function 函数_执行心跳检测(间隔) {
  log("开启心跳");
  日志写入("**********主心跳线程启动***");
  //必须开启一个单独线程,来监控是否到期,为了不影响主线循环,所以单独分出来
  //约束间隔范围，不可低于10分钟，不可高于30分钟。
  if (!是否整型(间隔)) {
    间隔 = 10;
  } else if (parseInt(间隔) > 30) {
    间隔 = 30;
  } else if (parseInt(间隔) < 10) {
    间隔 = 10;
  }
  var 局部_当前通讯次数 = 0;
  var 局部_允许失败次数 = 30;
  var 局部_失败重试间隔 = 0;
  var 局部_等待时间 = "";
  var 局部_剩余分钟 = 0;
  var 局部_首次通讯 = true;
  var d = "";
  var xt = 1;
  while (true) {
    日志写入("*******************心跳[" + xt + "]*************************");
    log("心跳" + xt);
    log("心跳正常，剩余分钟:" + 信息剩余分钟);
    xt++;
    局部_失败重试间隔 = (间隔 * 60) / 2;
    //建议间隔10-30分钟，访问一次服务器，原因例子中已写明，没看的请返回看
    if (局部_首次通讯) {
      d = new Date();
      d.setTime(d.setMinutes(d.getMinutes() + 3));
      局部_等待时间 = d;
      //局部_等待时间 = 指定时间("s", 180, 当前时间());//首次3分钟间隔，以此检测一次是否存在重复登录行为
    } else {
      d = new Date();
      d.setTime(d.setMinutes(d.getMinutes() + 间隔));
      局部_等待时间 = d;
      //局部_等待时间 = 指定时间("s", 间隔, 当前时间());//单位：秒
    }
    while (局部_等待时间 - new Date() > 0) {
      sleep(3000);
    }
    //与服务器通讯，获取剩余时间或状态
    log("检测心跳");
    for (
      局部_当前通讯次数 = 0;
      局部_当前通讯次数 <= 局部_允许失败次数;
      局部_当前通讯次数++
    ) {
      局部_剩余分钟 = 函数_获取剩余分钟();
      //操作失败:注册码已经解绑了，需要重新登录.
      //操作失败:注册码已经下线.
      if (局部_剩余分钟 != -1 && 信息错误内容 === "") {
        //通讯正常
        信息剩余分钟 = 局部_剩余分钟;
        if (局部_剩余分钟 <= 0) {
          信息错误内容 = "注册码已到期，剩余分钟：" + 局部_剩余分钟;
          log("注册码已到期，剩余分钟：" + 局部_剩余分钟);
          return; //过期离开Sub，停止运行
        } else {
          局部_首次通讯 = false; //通讯成功，则恢复设定间隔
          break; //否则离开通讯循环，等待下次通讯
        }
      } else if (信息超时重登 && 信息错误内容 === "操作失败:注册码已经下线.") {
        log("登录超时，重新登录");
        if (函数_执行注册登录()) {
          //注册成功,时间不足会返回失败,失败信息在 变量_错误信息 里
          //返回:登陆状态|剩余时间(分钟)|访问令牌
          log("注册成功");
          break; //成功了，离开等待下次通讯
        } else {
          //注册失败
          log("注册失败：" + 信息错误内容);
        }
      } else if (信息错误内容.indexOf("操作失败:") > -1) {
        //登录失效，停止
        信息剩余分钟 = -1;
        log("心跳信息" + 信息错误内容);
        return; //登录状态异常，被顶号，登录失效，停止离开
      }
      //通讯异常，服务器繁忙，并发数占满导致请求超时：等待短暂时间后重试
      log("通讯异常：" + 信息错误内容);
      //次数超出，离开尝试通讯
      if (局部_当前通讯次数 >= 局部_允许失败次数) {
        信息剩余分钟 = -1;
        信息错误内容 = "通讯失败次数超出";
        log("心跳信息" + 信息错误内容);
        return; //重试次数超出，停止
      }
      //通讯失败，等待，再尝试
      for (var i = 0; i < 局部_失败重试间隔; i++) {
        sleep(1000);
      }
      if (局部_失败重试间隔 > 60) {
        局部_失败重试间隔 = 局部_失败重试间隔 / 2;
      } else if (局部_失败重试间隔 < 60) {
        局部_失败重试间隔 = 60; //间隔不可小于60秒
      }
    }
  }
}
//-----------------------------------------------------------
//-----------------------------------------------------------
//以下是给内部插件调用模块, 外部调用使用无需理会
//-----------------------------------------------------------
//以下是给内部插件调用模块, 外部调用使用无需理会
//-----------------------------------------------------------
//以下是给内部插件调用模块, 外部调用使用无需理会
//-----------------------------------------------------------

function 执行参数验证(验证参数) {
  信息错误内容 = "";
  //token与项目名称,是必填参数
  if (验证参数 === "") {
    信息错误内容 =
      "参数错误:验证参数不可为空,请确认bbyreg命令库源码的完整性,或联系作者";
  } else if (信息token === "") {
    信息错误内容 = "参数错误:Token不可为空,请重新核对赋值信息";
  } else if (信息token.length != 32) {
    信息错误内容 = "参数错误:Token位数非32位,请重新核对赋值信息";
  } else if (验证参数.indexOf("项目名称") > -1 && 信息项目名称 === "") {
    信息错误内容 = "参数错误:项目名称不可为空,请重新核对赋值信息";
  } else if (验证参数.indexOf("机器码") > -1 && 信息机器码 === "") {
    信息错误内容 = "参数错误:机器码不可为空,请确认注册登录成功后再调用通讯请求";
  } else if (验证参数.indexOf("注册码") > -1 && 信息注册码 === "") {
    信息错误内容 = "参数错误:注册码不可为空,请重新核对赋值信息";
  } else if (验证参数.indexOf("注册码") > -1 && 信息注册码.length != 32) {
    信息注册码.replace(" ", "");
    //信息注册码 = 字符串替换(信息注册码, " ", "");
    var n = 信息注册码.length;
    if (n === 32) {
      //去除空格，验证成功
      return true;
    } else {
      var arr = array(
        "xiaoshika",
        "tianka",
        "zhouka",
        "yueka",
        "jika",
        "bannianka",
        "nianka",
        "yongjiuka"
      );
      for (var i = 0; i < arr.length; i++) {
        if (信息注册码.indexOf(arr[i]) === 0 && arr[i].length + 32 === n) {
          return true;
        }
      }
    }
    信息错误内容 = "参数错误:注册码位数非32位,请重新核对赋值信息";
  } else if (验证参数.indexOf("访问令牌") > -1 && 信息访问令牌 === "") {
    信息错误内容 = "参数错误:访问令牌为空,请确认注册登录成功后再调用通讯请求";
  } else {
    //参数无误
    return true;
  }
}
//-----------------------------------------------------------
function 获取通讯请求(请求) {
  //var 返回值 = http请求("get", "http://get.baibaoyun.com/api/" & 信息token & "?" & 获取中文转码(请求), "")
  var 返回值 = http.get(
    "http://get.baibaoyun.com/api/" + 信息token + "?" + 请求
  );
  //操作失败:xxxx
  //操作失败:注册码已经解绑了，需要重新登录.
  //log("html = " + 返回值.body.string());
  var b = 返回值.body.string();
  //log("所在位置>>>>"+返回值.body.string().indexOf("操作失败"))
  if (b.indexOf("操作失败") > -1) {
    信息错误内容 = b;
    return "";
  } else {
    return b;
  }
}

function 是否整型(val) {
  var regPos = /^\d+(\.\d+)?$/; //非负浮点数
  var regNeg =
    /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
  if (regPos.test(val) || regNeg.test(val)) {
    return true;
  } else {
    return false;
  }
}
